package com.yy.static_variable;

/**
 * chapter10  com.yy.static_variable
 * 2023-04-17 19:41
 *
 * @author yy yuyue
 * description : 不可描述
 * @date 2023/4/17 19:41
 */
public class StaticMethodDetail {
    public static void main(String[] args) {
        D.hi();//ok
        //非静态方法, 不能通过类名来调用
//        D.say(); 错误, 需要先创建对象, 再调用
        new D().say();//可以

    }
}
class D{

    private int n1 = 100;
    private static int n2 = 200;
    public void say(){ //非静态方法

    }
    public static void hi(){ //静态方法 类方法
        /*类方法中不允许使用和对象有关的关键字
        比如this和super, 普通方法(成员方法)可以
        this()和super()只能在构造器类名使用!!!

         */
       // System.out.println(this.n1);

    }
   //类方法(静态方法中) 只能访问 静态变量 或者静态方法
    //口诀: 静态方法只能访问非静态成员.
    public static void hello(){
        System.out.println(n2);
        System.out.println(D.n2);
       // System.out.println(this.n2);  错误   指代不明     哪个对象的??   不能使用
        hi();//ok
//        say();//错误

    }

    /*
     普通成员方法, 即可以访问 非静态成员, 也可以访问非静态成员
     小结: 非静态方法可以访问 静态成员和 非静态成员
     */
    public void ok(){ //静态方法 类方法

        //非静态成员
        System.out.println(this.n1);
        say();
        //静态成员
        System.out.println(n2);
        hello();

    }

}
